GtkOrientation orientation;
GtkGesture *swipe_gesture;
+ GtkEventController *scroll_controller;
guint digits : 10;
guint need_timer : 1;
static gint gtk_spin_button_motion_notify (GtkWidget *widget,
GdkEventMotion *event);
-static gint gtk_spin_button_scroll (GtkWidget *widget,
- GdkEventScroll *event);
static void gtk_spin_button_activate (GtkEntry *entry,
gpointer user_data);
static void gtk_spin_button_unset_adjustment (GtkSpinButton *spin_button);
widget_class->realize = gtk_spin_button_realize;
widget_class->measure = gtk_spin_button_measure;
widget_class->size_allocate = gtk_spin_button_size_allocate;
- widget_class->scroll_event = gtk_spin_button_scroll;
widget_class->motion_notify_event = gtk_spin_button_motion_notify;
widget_class->key_release_event = gtk_spin_button_key_release;
widget_class->focus_out_event = gtk_spin_button_focus_out;
gtk_spin_button_real_spin (spin_button, -vel_y / 20);
}
+static void
+scroll_controller_scroll (GtkEventControllerScroll *Scroll,
+ gdouble dx,
+ gdouble dy,
+ GtkWidget *widget)
+{
+ GtkSpinButton *spin = GTK_SPIN_BUTTON (widget);
+ GtkSpinButtonPrivate *priv = spin->priv;
+
+ if (!gtk_widget_has_focus (widget))
+ gtk_widget_grab_focus (widget);
+ gtk_spin_button_real_spin (spin, -dy * gtk_adjustment_get_step_increment (priv->adjustment));
+}
+
static void
update_node_ordering (GtkSpinButton *spin_button)
{
G_CALLBACK (swipe_gesture_begin), spin_button);
g_signal_connect (priv->swipe_gesture, "update",
G_CALLBACK (swipe_gesture_update), spin_button);
+
+ priv->scroll_controller =
+ gtk_event_controller_scroll_new (GTK_WIDGET (spin_button),
+ GTK_EVENT_CONTROLLER_SCROLL_VERTICAL |
+ GTK_EVENT_CONTROLLER_SCROLL_DISCRETE);
+ g_signal_connect (priv->scroll_controller, "scroll",
+ G_CALLBACK (scroll_controller_scroll), spin_button);
}
static void
gtk_spin_button_unset_adjustment (spin_button);
+ g_object_unref (priv->scroll_controller);
g_object_unref (priv->swipe_gesture);
g_object_unref (priv->up_click_gesture);
g_object_unref (priv->down_click_gesture);
GTK_WIDGET_CLASS (gtk_spin_button_parent_class)->state_flags_changed (widget, previous_state);
}
-static gint
-gtk_spin_button_scroll (GtkWidget *widget,
- GdkEventScroll *event)
-{
- GtkSpinButton *spin = GTK_SPIN_BUTTON (widget);
- GtkSpinButtonPrivate *priv = spin->priv;
- GdkScrollDirection direction;
-
- if (!gdk_event_get_scroll_direction ((GdkEvent *) event, &direction))
- return GDK_EVENT_PROPAGATE;
-
- if (direction == GDK_SCROLL_UP)
- {
- if (!gtk_widget_has_focus (widget))
- gtk_widget_grab_focus (widget);
- gtk_spin_button_real_spin (spin, gtk_adjustment_get_step_increment (priv->adjustment));
- }
- else if (direction == GDK_SCROLL_DOWN)
- {
- if (!gtk_widget_has_focus (widget))
- gtk_widget_grab_focus (widget);
- gtk_spin_button_real_spin (spin, -gtk_adjustment_get_step_increment (priv->adjustment));
- }
- else
- return FALSE;
-
- return TRUE;
-}
-
static gint
gtk_spin_button_motion_notify (GtkWidget *widget,
GdkEventMotion *event)